package com.bosssoft.trainee.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bosssoft.trainee.mbg.dto.UserDTO;
import com.bosssoft.trainee.mbg.po.User;
import com.bosssoft.trainee.mbg.vo.UserVO;
import com.bosssoft.trainee.security.bo.UserBO;

/**
 * @Author: wuxin
 * @Date: 2022/6/17
 * @Project rbac
 * @Version 1.0
 * @Description
 */
public interface UserService {
    /**
     * 用户登录获取token
     */
    String login(String username,String password);
    /**
     * 根据用户名获取后台管理员
     */
    UserVO getByUsername(String username);
    /**
     * 获取用户信息
     */
    UserBO loadUserByUsername(String username);

    /**
     * 通过token获取用户的详细信息
     * @param token
     * @return
     */
    UserVO getUserInfo(String token);

    /**
     * 刷新token的功能
     * @param oldToken 旧的token
     */
    String refreshToken(String oldToken);

    /**
     * 根据Id获取用户
     */
    UserVO getById(int id);
    /**
     * 根据example获取用户列表
     *
     * @param pageSize 页大小
     * @param pageNum 页数
     * @param example 样例
     * @return 和example中属性相同的用户列表
     */
    Page<User> getList(int pageSize, int pageNum, UserDTO example);

    /**
     * 新增用户
     *
     * @param userDTO 新增对象
     * @return 受影响的记录数
     */
    int addUser(UserDTO userDTO);

    /**
     * 根据Id删除用户
     *
     * @param id 删除对象id
     * @return 受影响的记录数
     */
    int deleteById(int id);

    /**
     * 更新用户用户信息
     *
     * @param userDTO 更新对象
     * @return 受影响的记录数
     */
    int updateUser(UserDTO userDTO);

    /**
     * 检查工号是否被使用
     *
     * @param workerNum 工号
     * @return true:被使用，false:未被使用
     */
    boolean checkWorkerNum(String workerNum,Integer id);

    /**
     * 检查用户名是否被使用
     *
     * @param username 用户名
     * @return true:被使用，false:未被使用
     */
    boolean checkUsername(String username,Integer id);

    /**
     * 用户登出
     * @param token
     */
    void logout(String token);
}
